/**
  ****************************(C) COPYRIGHT 2019 DJI****************************
  * @file       chassis_behaviour.c/h
  * @brief      according to remote control, change the chassis behaviour.
  *             根据遥控器的值，决定底盘行为。
  * @note       
  * @history
  *  Version    Date            Author          Modification
  *  V1.0.0     Dec-26-2018     RM              1. done
  *  V1.1.0     Nov-11-2019     RM              1. add some annotation
  *
  ****************************(C) COPYRIGHT 2019 DJI****************************
  */

#ifndef CHASSIS_OMNI_H
#define CHASSIS_OMNI_H
#include "struct_typedef.h"
#include "chassis_task.h"

typedef enum
{
  CHASSIS_ZERO_FORCE,                   //底盘无力
  CHASSIS_NO_MOVE,                      //底盘保持不动
  CHASSIS_NO_FOLLOW_YAW,                //底盘不跟随云台，角度是开环，轮子是有速度环
  CHASSIS_OPEN,                         //遥控器的值乘以比例成电流值 直接发送到can总线上
} chassis_behaviour_e;

#define CHASSIS_OPEN_RC_SCALE 10 // 在chassis_open 模型下，遥控器乘以该比例发送到can上



/**
  * @brief          通过逻辑判断，赋值"chassis_behaviour_mode"成哪种模式
  * @param[in]      chassis_move_mode: 底盘数据
  * @retval         none
  */
extern void chassis_behaviour_mode_set(chassis_move_t *chassis_move_mode);

/**
  * @brief          设置控制量.根据不同底盘控制模式，三个参数会控制不同运动.在这个函数里面，会调用不同的控制函数.
  * @param[out]     vx_set, 通常控制纵向移动.
  * @param[out]     vy_set, 通常控制横向移动.
  * @param[out]     wz_set, 通常控制旋转运动.
  * @param[in]      chassis_move_rc_to_vector,  包括底盘所有信息.
  * @retval         none
  */

extern void chassis_behaviour_control_set(fp32 *vx_set, fp32 *vy_set, fp32 *angle_set, chassis_move_t *chassis_move_rc_to_vector);
 
#endif
